package net.siufung.security.base.utils;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

/**
 *
 * 用户密码加密工具
 * @author 陈建峰
 * @since 2021/11/12 1:29 下午
 */
public class PasswordUtil {

    /**
     * 获取加密方式
     * @return 加密方式
     */
    public static PasswordEncoder get(){
        return new BCryptPasswordEncoder();
    }

    /**
     * 获取自定义加密方式
     * @param strength 加密方式长度
     * @return 加密方式
     */
    public static PasswordEncoder get(int strength){
        return new BCryptPasswordEncoder(strength);
    }

    /**
     * 加密密码
     * @param password 明文密码
     * @return 加密密码
     */
    public static String entrypt(String password){
        return get().encode(password);
    }

    /**
     * 加密密码
     * @param password 明文密码
     * @param strength 加密方式长度
     * @return 加密密码
     */
    public static String entrypt(int strength, String password){
        return get(strength).encode(password);
    }

    /**
     * 密码匹配
     * @param rawPassword 原始密码
     * @param encodedPassword 加密密码
     * @return 密码匹配正确性
     */
    public static boolean matches(String rawPassword, String encodedPassword){
        return get().matches(rawPassword, encodedPassword);
    }

    /**
     * 密码匹配
     * @param rawPassword 原始密码
     * @param encodedPassword 加密密码
     * @param strength 加密方式长度
     * @return 密码匹配正确性
     */
    public static boolean matches(int strength, String rawPassword, String encodedPassword){
        return get(strength).matches(rawPassword, encodedPassword);
    }

}
